const path = require('path');
const CopyPlugin = require('copy-webpack-plugin');
const TerserPlugin = require('terser-webpack-plugin');
const ZipPlugin = require('zip-webpack-plugin');

module.exports = {
  entry: {
    background: './src/background.ts',
    content: './src/content.ts',
    popup: './src/popup.ts',
  },
  output: {
    filename: '[name].js',
    path: path.resolve(__dirname, 'dist'),
    clean: true,
  },
  mode: 'production',
  module: {
    rules: [
      {
        test: /\.ts$/,
        use: 'ts-loader',
        exclude: /node_modules/,
      },
    ],
  },
  resolve: {
    extensions: ['.ts', '.js'],
  },
  optimization: {
    minimize: true, // 保持压缩启用（移除空格/注释等）
    minimizer: [
      new TerserPlugin({
        terserOptions: {
          // 关键配置：禁用所有混淆
          mangle: false,         // 不混淆变量/函数名
          keep_classnames: true, // 保留类名
          keep_fnames: true,     // 保留函数名
          
          // 可选：压缩配置（保持逻辑压缩）
          compress: {
            drop_console: false, // 不移除console语句
            reduce_vars: true,   // 允许变量简化（不改变名称）
          },
          
          // 格式化输出（可选）
          format: {
            comments: 'some',    // 保留部分注释
            beautify: false      // 不美化输出（保持压缩）
          }
        },
        extractComments: false, // 不提取注释到单独文件
      })
    ],
  },
  plugins: [
    new CopyPlugin({
      patterns: [
        { from: 'src/popup.html', to: 'popup.html' },
        { from: 'manifest.json', to: '' },
        { from: 'src/icons', to: 'icons' },
        { from: 'src/styles.css', to: '' },
        { from: 'src/jquery-3.6.4.min.js', to: ''}
      ],
    }),
    // 添加压缩为ZIP的插件配置
    new ZipPlugin({
      filename: 'dist.zip', // 生成的zip文件名
      path: path.resolve(__dirname), // 压缩文件保存路径（项目根目录）
      fileOptions: {
        mtime: new Date(), // 设置修改时间
        mode: 0o100664,
        compress: true,
        forceZip64Format: false,
      },
      zipOptions: {
        forceZip64Format: false,
      },
    })
  ],
};